package cn.learn.validate;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 校验码处理器
 * # 校验码逻辑分层处理业务（这里使用的是模板方法，并且在各个层级都留有接口方便自定义逻辑）
 * # 一、业务入口——>  ValidateCodeProcessor 接口 （这个接口是调用的入口）
 * # 二、本接口的实现类：{@link cn.learn.validate.impl.AbstractValidateCodeProcessor} 这里实现了验证码处理的所有逻辑【模板】
 * #    逻辑步骤：①生成验证码 ②把验证码存进session里面 ③把验证码发回给用户
 * #    ①生成验证码：有统一一个接口，所有生成验证码的逻辑都实现这个接口，如果逻辑不符合，则自己实现接口自定义一个
 * #    ②把验证码存进session里面
 * #    ③把验证码发回给用户：处理验证码发送给用户的逻辑，其逻辑继承于{@link cn.learn.validate.impl.AbstractValidateCodeProcessor}，定义了一个接口方便自定义自己的逻辑
 *
 * @author huangyezhan
 * @date 2020年2月18日16:19:27
 */
public interface ValidateCodeProcessor {

    /**
     * 验证码放入session时的前缀
     */
    String SESSION_KEY_PREFIX = "SESSION_KEY_FOR_CODE_";

    /**
     * 创建校验码
     *
     * @param request  请求
     * @param response 响应
     * @throws Exception
     */
    void createCode(HttpServletRequest request, HttpServletResponse response);

    /**
     * 校验验证码
     *
     * @param request       请求
     * @throws Exception
     */
    void validate(HttpServletRequest request);





}
